package com.tinyengine.it.model.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.tinyengine.it.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.Date;

/**
 * 应用表
 *
 * @TableName t_app
 */
@Schema(title = " 应用表")
@Data
@TableName(value = "t_app")
public class TApp extends BaseEntity {

    /**
     * 应用名称
     */
    @NotNull(message = "应用名称不能为空")
    @Schema(title = "应用名称")
    private String name;

    /**
     * 关联设计器id
     */
    @Schema(title = "关联设计器id")
    @JsonProperty("platform")
    private Integer platformId;

    /**
     * 关联设计器历史版本id
     */
    @Schema(title = "关联设计器历史版本id")
    private Integer platformHistoryId;

    /**
     * 项目git地址
     */
    @NotNull(message = "项目git地址不能为空")
    @Schema(title = "项目git地址") 
    @Pattern(regexp = "^(https?:\\/\\/)[\\w\\d\\.\\-]+(?::[\\d]+)?[\\w\\d\\.\\-\\/]+\\.git$", message = "请输入有效的Git仓库地址,必须以http或https开头")
    private String gitRepoEngineUrl;
    /**
     * 项目git地址
     */
    @NotNull(message = "项目git地址不能为空")
    @Schema(title = "项目git地址")
    @Pattern(regexp = "^(https?:\\/\\/)[\\w\\d\\.\\-]+(?::[\\d]+)?[\\w\\d\\.\\-\\/]+\\.git$", message = "请输入有效的Git仓库地址,必须以http或https开头")
    private String gitRepoVueUrl;

    /**
     * 应用静态资源托管地址
     */
    @Schema(title = "应用静态资源托管地址")
    private String publishUrl;

    /**
     * 设计器地址
     */
    @Schema(title = "设计器地址")
    private String editorUrl;

    /**
     * 访问地址
     */
    @Schema(title = "访问地址")
    private String visitUrl;

    /**
     * 封面图地址
     */
    @Schema(title = "封面图地址")
    private String imageUrl;

    /**
     * 应用资源地址
     */
    @Schema(title = "应用资源地址")
    private String assetsUrl;

    /**
     * 应用状态，1可用，0不可用
     */
    @Schema(title = "应用状态，1可用，0不可用")
    private Integer state;

    /**
     * 是否发布：1是，0否
     */
    @Schema(title = "是否发布：1是，0否")
    private Integer published;

    /**
     * 主页id，关联page表的id
     */
    @Schema(title = "主页id，关联page表的id")
    private Integer homePageId;

    /**
     * 设计预留字段
     */
    @Schema(title = "设计预留字段")
    private String appWebsite;

    /**
     * 设计预留字段
     */
    @Schema(title = "设计预留字段")
    private String css;

    /**
     * 设计预留字段
     */
    @Schema(title = "设计预留字段")
    private String config;

    /**
     * 设计预留字段
     */
    @Schema(title = "设计预留字段")
    private String constants;

    /**
     * 数据源的拦截器
     */
    @Schema(title = "数据源的拦截器")
    private String dataHandler;

    /**
     * 应用最新历史记录id
     */
    @Schema(title = "应用最新历史记录id")
    private String latest;

    /**
     * git仓库分组
     */
    @Schema(title = "git仓库分组")
    private String gitGroup;

    /**
     * git仓库名称
     */
    @Schema(title = "git仓库名称")
    private String projectName;

    /**
     * 默认提交分支
     */
    @Schema(title = "默认提交分支")
    private String branch;

    /**
     * 是否是demo应用
     */
    @Schema(title = "是否是demo应用")
    private Integer isDemo;

    /**
     * 是否是默认应用
     */
    @Schema(title = "是否是默认应用")
    private Integer isDefault;

    /**
     * 应用模板类型
     */
    @Schema(title = "应用模板类型")
    private String templateType;

    /**
     * 设置模板时间
     */
    @Schema(title = "设置模板时间")
    private Date setTemplateTime;

    /**
     * 描述
     */
    @Schema(title = "描述")
    private String description;

    /**
     * 设置模板人id
     */
    @Schema(title = "设置模板人id")
    private String setTemplateBy;

    /**
     * 设置为默认应用人id
     */
    @Schema(title = "设置为默认应用人id")
    private String setDefaultBy;

    /**
     * 应用框架
     */
    @Schema(title = "应用框架")
    private String framework;

    /**
     * 应用全局状态
     */
    @Schema(title = "应用全局状态")
    private String globalState;

    /**
     * 默认语言
     */
    @Schema(title = "默认语言")
    private String defaultLang;

    /**
     * 应用扩展config
     */
    @Schema(title = "应用扩展config")
    private String extendConfig;

    /**
     * 应用内容哈希值
     */
    @Schema(title = "应用内容哈希值")
    private String dataHash;

    /**
     * 设计预留字段
     */
    @Schema(title = "设计预留字段")
    private Integer canAssociate;

    /**
     * 数据源全局配置
     */
    @Schema(title = "数据源全局配置")
    private String dataSourceGlobal;

}